╬πδαΓδσφΦσ

╠φεπε∩ε≥ε≈φε±≥ⁿ
╧≡ε÷σ±±√, ∩ε≥εΩΦ Φ ∩≡Φε≡Φ≥σ≥√
╠φεπε∩ε≥ε≈φε±≥ⁿ Γ Java
╠φεπε∩ε≥ε≈φε±≥ⁿ Φ αφΦ∞α÷Φ 
╤Φφ⌡≡εφΦτα÷Φ  ∩ε≥εΩεΓ
╧ε≥εΩΦ-Σσ∞εφ√
└∩δσ≥ Rectangles
╚±⌡εΣφ√σ ≥σΩ±≥√
╬∩Φ±αφΦσ ≥σΩ±≥εΓ

    ╬∩Φ±αφΦσ Φ±⌡εΣφ√⌡ ≥σΩ±≥εΓ α∩δσ≥α Rectangles

    ┬ ²≥ε∞ ∩≡ΦδεµσφΦΦ ∞√ ±ετΣασ∞ φα ßατσ Ωδα±±α Thread ≥≡Φ Ωδα±±α. ╧σ≡Γ√Θ Φτ φΦ⌡ ∩≡σΣφατφα≈σφ Σδ  ±ετΣαφΦ  ∩ε≥εΩα ≡Φ±εΓαφΦ  ∩≡ ∞ε≤πεδⁿφΦΩεΓ, Γ≥ε≡εΘ - Σδ  ±ετΣαφΦ  ∩ε≥εΩα ≡Φ±εΓαφΦ  ταΩ≡α°σφφ√⌡ ²δδΦ∩±εΓ, α ≥≡σ≥ΦΘ - Σδ  ≤∩≡αΓδσφΦ  ∩ε≥εΩε∞ ≡Φ±εΓαφΦ  ²δδΦ∩±εΓ.

    ╫≥ε µσ Ωα±ασ≥±  ε±φεΓφεπε Ωδα±±α α∩δσ≥α, ≥ε εφ ≤φα±δσΣεΓαφ, ΩαΩ εß√≈φε, ε≥ Ωδα±±α Applet Φ φσ ≡σαδΦτ≤σ≥ Φφ≥σ≡⌠σΘ± Runnable:

    public class Rectangles extends Applet
    {
      . . .
    }

    ╧εδ  Ωδα±±α Rectangles

    ┬ Ωδα±±σ Rectangles ∞√ ε∩≡σΣσδΦδΦ ≥≡Φ ∩εδ  ± Φ∞σφα∞Φ m_DrawRectThread, m_DrawEllipseThread Φ m_NotifyTaskThread:

    DrawRectangles m_DrawRectThread = null;
    DrawEllipse m_DrawEllipseThread = null;
    NotifyTask m_NotifyTaskThread = null

    ▌≥Φ ∩εδ   Γδ ■≥±  ±±√δΩα∞Φ φα Ωδα±±√, ±εε≥Γσ≥±≥Γσφφε DrawRectangles, DrawEllipse Φ NotifyTask . ╧σ≡Γ√Θ Φτ φΦ⌡ ±ετΣαφ Σδ  ≡Φ±εΓαφΦ  ∩≡ ∞ε≤πεδⁿφΦΩεΓ, Γ≥ε≡εΘ - ²δδΦ∩±εΓ, α ≥≡σ≥ΦΘ - Σδ  ≤∩≡αΓδσφΦ  ∩ε≥εΩε∞ ≡Φ±εΓαφΦ  ²δδΦ∩±εΓ.

    ╙Ωαταφφ√σ ∩εδ  ΦφΦ÷ΦαδΦτΦ≡≤■≥±  ταφ≈σφΦσ∞ null, ≈≥ε ±εε≥Γσ≥±≥Γ≤σ≥ φσ≡αßε≥α■∙Φ∞ ΦδΦ φσ±ετΣαφφ√∞ ταΣα≈α∞.

    ╠σ≥εΣ start Ωδα±±α Rectangles

    ▌≥ε≥ ∞σ≥εΣ ∩ε±δσΣεΓα≥σδⁿφε ±ετΣασ≥ ≥≡Φ ∩ε≥εΩα Φ τα∩≤±Ωασ≥ Φ⌡ φα Γ√∩εδφσφΦσ:

    if(m_DrawRectThread == null)
    {
      m_DrawRectThread = 
        new DrawRectangles(this);
      m_DrawRectThread.start();
    }
    if(m_DrawEllipseThread == null)
    {
      m_DrawEllipseThread = 
        new DrawEllipse(this);
      m_DrawEllipseThread.start();
    }
    if(m_NotifyTaskThread == null)
    {
      m_NotifyTaskThread = 
        new NotifyTask(m_DrawEllipseThread);
      m_NotifyTaskThread.start();
    }

    ┬ Ωα≈σ±≥Γσ ∩α≡α∞σ≥≡α  Ωεφ±≥≡≤Ω≥ε≡α∞ Ωδα±±εΓ DrawRectangles Φ DrawEllipse ∞√ ∩σ≡σΣασ∞ ±±√δΩ≤ φα α∩δσ≥ Rectangles. ▌≥α ±±√δΩα ß≤Σσ≥ φ≤µφα Σδ  ∩εδ≤≈σφΦ  Ωεφ≥σΩ±≥α ε≥εß≡αµσφΦ  Φ ≡Φ±εΓαφΦ  πσε∞σ≥≡Φ≈σ±ΩΦ⌡ ⌠Φπ≤≡.

    ╧ε≥εΩ Ωδα±±α NotifyTask ß≤Σσ≥ ≤∩≡αΓδ ≥ⁿ ≡αßε≥εΘ ∩ε≥εΩα DrawEllipse, ∩ε²≥ε∞≤ ∞√ ∩σ≡σΣασ∞ σπε Ωεφ±≥≡≤Ω≥ε≡≤ ±±√δΩ≤ φα ±εε≥Γσ≥±≥Γ≤■∙ΦΘ εß·σΩ≥ m_DrawEllipseThread.

    ╠σ≥εΣ stop Ωδα±±α Rectangles

    ╩επΣα ∩εδⁿτεΓα≥σδⁿ ∩εΩΦΣασ≥ ±≥≡αφΦ÷≤ ±σ≡Γσ≡α Web ± α∩δσ≥ε∞, ∞σ≥εΣ stop Ωδα±±α Rectangles ∩ε±δσΣεΓα≥σδⁿφε ε±≥αφαΓδΦΓασ≥ gjnjrb ≡Φ±εΓαφΦ  ∩≡ ∞ε≤πεδⁿφΦΩεΓ Φ ²δδΦ∩±εΓ, α ≥αΩµσ ≤∩≡αΓδ ■∙ΦΘ ∩ε≥εΩ:

    if(m_DrawRectThread != null)
    {
      m_DrawRectThread.stop();
      m_DrawRectThread = null;
    }
    if(m_DrawEllipseThread == null)
    {
      m_DrawEllipseThread.stop();
      m_DrawEllipseThread = null;
    }    
    if(m_NotifyTaskThread != null)
    {
      m_NotifyTaskThread.stop();
      m_NotifyTaskThread = null;
    }

    ╧εδ  Ωδα±±α DrawRectangles

    ╩δα±± DrawRectangles ε∩≡σΣσδσφ Σδ  ∩ε≥εΩα ≡Φ±εΓαφΦ  ∩≡ ∞ε≤πεδⁿφΦΩεΓ:

    class DrawRectangles extends Thread
    {
      . . .
    }

    ┬ ∩εδσ g Ωδα±α ⌡≡αφΦ≥±  Ωεφ≥σΩ±≥ ε≥εß≡αµσφΦ  εΩφα α∩δσ≥α, α Γ ∩εδσ dimAppWndDimension - ≡ατ∞σ≡√ ²≥επε εΩφα:

    Graphics g;
    Dimension dimAppWndDimension;

    ╟φα≈σφΦ  ²≥Φ⌡ ∩εδσΘ ε∩≡σΣσδ ■≥±  Ωεφ±≥≡≤Ω≥ε≡ε∞ Ωδα±±α ∩ε ±±√δΩσ φα πδαΓφ√Θ Ωδα±± α∩δσ≥α.

    ╩εφ±≥≡≤Ω≥ε≡ Ωδα±±α DrawRectangles

    ┬ Ωα≈σ±≥Γσ ∩α≡α∞σ≥≡α Ωεφ±≥≡≤Ω≥ε≡≤ ∩σ≡σΣασ≥±  ±±√δΩα φα Ωδα±± α∩δσ≥α. ╩εφ±≥≡≤Ω≥ε≡ Φ±∩εδⁿτ≤σ≥ ²≥≤ ±±√δΩ≤ Σδ  ∩εδ≤≈σφΦ  Φ ±ε⌡≡αφσφΦ  Γ ∩εδ ⌡ Ωδα±±α Ωεφ≥σΩ±≥α ε≥εß≡αµσφΦ  Φ ≡ατ∞σ≡εΓ εΩφα α∩δσ≥α:

    public DrawRectangles(Applet Appl)
    {
      g = Appl.getGraphics();
      dimAppWndDimension = Appl.getSize();
    }

    ╠σ≥εΣ run Ωδα±±α DrawRectangles

    ╧≡επ≡α∞∞φ√Θ ΩεΣ ∞σ≥εΣα run ≡αßε≥ασ≥ Γ ≡α∞Ωα⌡ ε≥Σσδⁿφεπε ∩ε≥εΩα. ╬φ ≡Φ±≤σ≥ Γ εΩφσ α∩δσ≥α ταΩ≡α°σφφ√σ ∩≡ ∞ε≤πεδⁿφΦΩΦ. ╧≡ ∞ε≤πεδⁿφΦΩΦ Φ∞σ■≥ ±δ≤≈αΘφ√σ Ωεε≡ΣΦφα≥√, ≡α±∩εδεµσφΦσ Φ ÷Γσ≥.

    ─δ  ≥επε ≈≥εß√ ≡Φ±εΓα≥ⁿ, φσεß⌡εΣΦ∞ε ∩εδ≤≈Φ≥ⁿ Ωεφ≥σΩ±≥ ε≥εß≡αµσφΦ . ▌≥ε≥ Ωεφ≥σΩ±≥ ß√δ ∩εδ≤≈σφ Ωεφ±≥≡≤Ω≥ε≡ε∞ Ωδα±±α DrawRectangles Φ ∞εµσ≥ ß√≥ⁿ Φ±∩εδⁿτεΓαφ ∞σ≥εΣε∞ run.

    ┬εε≡≤µΦΓ°Φ±ⁿ Ωεφ≥σΩ±≥ε∞ ε≥εß≡αµσφΦ  Φ ≡ατ∞σ≡α∞Φ εΩφα α∩δσ≥α, ∩ε≥εΩ Γ⌡εΣΦ≥ Γ ßσ±Ωεφσ≈φ√Θ ÷ΦΩδ ≡Φ±εΓαφΦ  ∩≡ ∞ε≤πεδⁿφΦΩεΓ.

    ┬ Ωα≈σ±≥Γσ πσφσ≡α≥ε≡α ±δ≤≈αΘφ√⌡ ≈Φ±σδ ∞√ Φ±∩εδⁿτ≤σ∞ ∞σ≥εΣ random Φτ Ωδα±±α Math, Ωε≥ε≡√Θ ∩≡Φ ΩαµΣε∞ Γ√τεΓσ ΓετΓ≡α∙ασ≥ φεΓεσ ±δ≤≈αΘφεσ ≈Φ±δε ≥Φ∩α double, δσµα∙σσ Γ ΣΦα∩ατεφσ τφα≈σφΦΘ ε≥ 0.0 Σε 1.0.

    ╩εε≡ΣΦφα≥√ ∩ε ε± ∞ X Φ Y ≡Φ±≤σ∞επε ∩≡ ∞ε≤πεδⁿφΦΩα ε∩≡σΣσδ ■≥±  ∩≡ε±≥√∞ ≤∞φεµσφΦσ∞ ±δ≤≈αΘφεπε ≈Φ±δα, ∩εδ≤≈σφφεπε ε≥ ∞σ≥εΣα random, ±εε≥Γσ≥±≥Γσφφε, φα °Φ≡Φφ≤ Φ Γ√±ε≥≤ εΩφα α∩δσ≥α:

    x = (int)(dimAppWndDimension.width 
      * Math.random());
    y = (int)(dimAppWndDimension.height
      * Math.random());

    └φαδεπΦ≈φε ε∩≡σΣσδ ■≥±  ≡ατ∞σ≡√ ∩≡ ∞ε≤πεδⁿφΦΩα, εΣφαΩε ≈≥εß√ ∩≡ ∞ε≤πεδⁿφΦΩΦ φσ ß√δΦ ±δΦ°Ωε∞ Ω≡≤∩φ√∞Φ, ∞√ ΣσδΦ∞ ∩εδ≤≈σφφ√σ τφα≈σφΦ  φα 2:

    width  = (int)(dimAppWndDimension.width
      * Math.random()) / 2;
    height = (int)(dimAppWndDimension.height
      * Math.random()) / 2;

    ╥αΩ ΩαΩ ±δ≤≈αΘφεσ ≈Φ±δε Φ∞σσ≥ ≥Φ∩ double, Γ εßεΦ⌡ ±δ≤≈α ⌡ ∞√ Γ√∩εδφ σ∞  Γφεσ ∩≡σεß≡ατεΓαφΦσ ≡στ≤δⁿ≥α≥α Γ√≈Φ±δσφΦΘ Ω ≥Φ∩≤ int.

    ─δ  ±δ≤≈αΘφεπε Γ√ßε≡α ÷Γσ≥α ∩≡ ∞ε≤πεδⁿφΦΩα ∞√ Γ√≈Φ±δ σ∞ ε≥Σσδⁿφ√σ ÷Γσ≥εΓ√σ Ωε∞∩εφσφ≥√, ≤∞φεµα  τφα≈σφΦσ, ∩εδ≤≈σφφεσ ε≥ ∞σ≥εΣα random, φα ≈Φ±δε 255:

    rColor = (int)(255 * Math.random());
    gColor = (int)(255 * Math.random());
    bColor = (int)(255 * Math.random());

    ╧εδ≤≈σφφ√σ τφα≈σφΦ  ÷Γσ≥εΓ√⌡ Ωε∞∩εφσφ≥ Φ±∩εδⁿτ≤■≥±  Γ Ωεφ±≥≡≤Ω≥ε≡σ Color Σδ  ∩εδ≤≈σφΦ  ÷Γσ≥α. ▌≥ε≥ ÷Γσ≥ ≤±≥αφαΓδΦΓασ≥±  Γ Ωεφ≥σΩ±≥σ ε≥εß≡αµσφΦ  ∞σ≥εΣε∞ setColor:

    g.setColor(new Color(rColor, 
      gColor, bColor));

    ╥σ∩σ≡ⁿ Γ±σ πε≥εΓε Σδ  ≡Φ±εΓαφΦ  ∩≡ ∞ε≤πεδⁿφΦΩα, Ωε≥ε≡εσ ∞√ Γ√∩εδφ σ∞ ∩≡Φ ∩ε∞ε∙Φ ∞σ≥εΣα fillRect:

    g.fillRect(x, y, width, height);

    ╧ε±δσ ≡Φ±εΓαφΦ  ∩≡ ∞ε≤πεδⁿφΦΩα ∞σ≥εΣ run ταΣσ≡µΦΓασ≥ ±Γε■ ≡αßε≥≤ φα 50 ∞ΦδδΦ±σΩ≤φΣ, Γ√τ√Γα  ∞σ≥εΣ sleep:

    try
    {
      Thread.sleep(50);
    }
    catch (InterruptedException e)
    {
      stop();
    }

    ─δ  εß≡αßε≥ΩΦ Φ±Ωδ■≈σφΦ  InterruptedException, Ωε≥ε≡εσ ∞εµσ≥ ΓετφΦΩφ≤≥ⁿ Γε Γ≡σ∞  ≡αßε≥√ ²≥επε ∞σ≥εΣα, ∞√ ∩≡σΣ≤±∞ε≥≡σδΦ ßδεΩ try - catch. ╧≡Φ ΓετφΦΩφεΓσφΦΦ ≤Ωαταφφεπε Φ±Ωδ■≈σφΦ  ≡αßε≥α ∩ε≥εΩα ε±≥αφαΓδΦΓασ≥±  Γ√τεΓε∞ ∞σ≥εΣα stop.

    ╠σ≥εΣ run Ωδα±±α DrawEllipse

    ╩δα±± DrawEllipse ε≈σφⁿ ∩ε⌡εµ φα ≥εδⁿΩε ≈≥ε ≡α±±∞ε≥≡σφφ√Θ Ωδα±± DrawRectangles. ╬≥δΦ≈Φσ σ±≥ⁿ ≥εδⁿΩε Γ ⌠Φφαδⁿφε∞ ⌠≡απ∞σφ≥σ ∞σ≥εΣα run, Ωε≥ε≡√Θ ∞√ Φ ≡α±±∞ε≥≡Φ∞.

    ┬∞σ±≥ε ταΣσ≡µΩΦ φα 50 ∞ΦδδΦ±σΩ≤φΣ ∞σ≥εΣ run Φτ Ωδα±±α DrawEllipse ∩σ≡σ⌡εΣΦ≥ Γ ±ε±≥ε φΦσ εµΦΣαφΦ  ΦτΓσ∙σφΦ , Γ√τ√Γα  ∞σ≥εΣ wait:

    try
    {
      this.wait();
    }
    catch (InterruptedException e)
    {
    }

    ▌≥ε ΦτΓσ∙σφΦσ ±ετΣασ≥±  ≤∩≡αΓδ ■∙Φ∞ ∩ε≥εΩε∞ Ωδα±±α NotifyTask, Ω ε∩Φ±αφΦ■ Ωε≥ε≡επε ∞√ ∩σ≡σ⌡εΣΦ∞.

    ╧εδ  Ωδα±±α NotifyTask

    ┬ Ωδα±±σ NotifyTask ∞√ ε∩≡σΣσδΦδΦ εΣφε ∩εδσ STask Ωδα±±α Thread. ▌≥ε ∩εδσ Ωε≥ε≡εσ ⌡≡αφΦ≥ ±±√δΩ≤ φα ∩ε≥εΩ, ≡αßε≥εΘ Ωε≥ε≡επε ≤∩≡αΓδ σ≥ Σαφφ√Θ Ωδα±±:

    class NotifyTask extends Thread
    {
      Thread STask;
       . . .
    }

    ╩εφ±≥≡≤Ω≥ε≡ Ωδα±±α NotifyTask

    ╩εφ±≥≡≤Ω≥ε≡ Ωδα±±α NotifyTask τα∩Φ±√Γασ≥ Γ ∩εδσ STask ±±√δΩ≤ φα ταΣα≈≤ ≡Φ±εΓαφΦ  ²δδΦ∩±εΓ:

    public NotifyTask(Thread SynchroTask)
    {
      STask = SynchroTask;
    }

    ╠σ≥εΣ run Ωδα±±α NotifyTask

    ╠σ≥εΣ run Ωδα±±α NotifyTask ∩σ≡ΦεΣΦ≈σ±ΩΦ ≡ατßδεΩΦ≡≤σ≥ ∩ε≥εΩ ≡Φ±εΓαφΦ  ²δδΦ∩±εΓ, Γ√τ√Γα  Σδ  ²≥επε ∞σ≥εΣ notify Γ ÷ΦδΩσ ± ταΣσ≡µΩεΘ 30 ∞ΦδδΦ±σΩ≤φΣ. ╬ß≡α∙σφΦσ Ω εß·σΩ≥≤ STask, Ωε≥ε≡√Θ ⌡≡αφΦ≥ ±±√δΩ≤ φα ∩ε≥εΩ ≡Φ±εΓαφΦ  ²δδΦ∩±εΓ, Γ√∩εδφ σ≥±  ± Φ±∩εδⁿτεΓαφΦσ∞ ±Φφ⌡≡εφΦτα÷ΦΦ:

    public void run()
    {
      while (true)
      {
        try
        {
          Thread.sleep(30);
        }
        catch (InterruptedException e)
        {
        }
        synchronized(STask)
        {
          STask.notify();
        }
      }
    }


Java | ╧≡εΣ≤Ω≥√ Φ ≡σ°σφΦ  | ╥σ⌡φεδεπΦΦ | ╤σ≡ΓΦ± Φ εß≤≈σφΦσ
╬ Ωε∞∩αφΦΦ | ╧α≡≥φσ≡√ | ═εΓε±≥Φ | ╧εΦ±Ω
Sun Microsystems Inc. Corporate Information Our partners News and Events Search on site Java Computing Products and Solutions Technologies and Researches Education and Service Content